/** 恐龙快打
  摆拳已经放弃了,可以用连发手动拉后,基本上就是连发为主,加上下上A.
  后来又增加了打投最后一击连升龙的快捷键,但操作需要用单发拳到最后一击
  再接快捷键,如果用连发则需要提前中止连发否则来不及!目前为了方便同时使用
  连发和单发两种方式,设定了两个后投升龙快捷键.此技能不同人物延时不同,
  暂时只用黄帽的,所以没有设定外部修改参数的方式,只把参数设定为一个
  static值.

  By setycyas @2023-10-27
*/

/* 全局设定
*/ {
#Warn
#MaxThreadsPerHotkey 1
SetWorkingDir(A_ScriptDir)
#Include "..\Class\FaceDetector.2.ahk"
#Include "..\Class\CommonMacro.2.ahk"
#Include "..\Class\CommonUI.2.ahk"
#Include "..\Class\MyFuns.2.ahk"
#Include "..\Class\MyEmu.2.ahk"
#Include "..\Class\OrderMap.2.ahk"
;SendMode("Event")
SendMode("Input")
}

/* 制作恐龙快打的宏类
*/ class DinoMacro extends CommonMacro {

  pressDuration := 30

  /* 新增的宏函数
  */
  _单发拳(key){
    this._press(1)
  }
  
  ;打投时最后一拳用这个快捷键
  _后投升龙(key){
    ;延时,黄帽70,大块头要200,因为只用黄帽所以暂时不提供修改延时方式
    static delay1 := 70 
    MyFuns.keyDown("down")
    sleep(30)
    this._press(1)
    sleep(delay1)
    MyFuns.keyUp("down")
    sleep(30)
    MyFuns.pressKeys(["up", this._keys[1]], [40, 50])
  }
  
  ;大汉:120,80,140
  ;太难实现,暂时放弃
  _摆拳(key){
    local face := this._face.face()
    local back := this._face.back()
    local thisKey := MyFuns.getHotkey(key)
    loop 2 {
      loop 2 {
        this._press(1)
        sleep(this.testParams[1])
        if (!GetKeyState(thisKey, "P")){
          return
        }
      }
      sleep(this.testParams[2])
      MyFuns.press(back, 60)
      this._press(1)
      sleep(this.testParams[3])
      if (!GetKeyState(thisKey, "P")){
        return
      }
      MyFuns.press(face, 40)
      sleep(40)
    }
    this._连发A(key)
  }

  /* 重载宏接口
  */
  _setMacro(){
    static obm := ObjBindMethod ;函数名简写,制作对象绑定函数
    ;制作宏相关Map
    this.macroMap := OrderMap()
    this.macroMap["连发A"] := obm(this, "_连发A")
    this.macroMap["下上A"] := obm(this, "_下上A")
    ;this.macroMap["摆拳"] := this._摆拳.bind(this)
    this.macroMap["单发拳"] := obm(this, "_单发拳")
    this.macroMap["前冲A"] := obm(this, "_前冲A")
    this.macroMap["后投升龙"] := obm(this, "_后投升龙")
    ;制作指定宏顺序的数组
    this.macroArr := this.macroMap.getKeys()
  }
}

/* 运行当前脚本
*/ if (A_ScriptName == "恐龙快打.2.ahk") {
  face := FaceDetector() ;方向检测对象
  macro := DinoMacro(face, ["q","f"]) ;宏对象,有界面时第二个参数可以随便写但长度不要小于2
  ;宏方案预设,用于菜单
  preset := OrderMap(["默认", ["连发A", "下上A", "前冲A", "后投升龙", "后投升龙"]])
  ;新建界面对象并显示
  ui := CommonUI("恐龙快打", macro, preset)
  ui.setup()
  ;更新组件内容
  ;ui._exeComboBox.Choose(MyEmu.NEBULA)
  ui._exeComboBox.Choose(MyEmu.WINKAWAKS)
  ui._gameKeyEdit.Text := "e,f"
  ui._hotkeyEdit.Text := "~d,s,g,c,w"
  ui._fpsEdit.Text := 15
  ui._testEdit.Text := "30,30,30,30"
  ;ui.readPresetMenu("无连发")
  ui.readPresetMenu("默认")
  ;ui.readPresetMenu("无摆拳")
}
